
export const DEFAULT_BODY = {
    version: "10800692",
    product: "com.matchmagic.tripletiles.game",
    platform: "ios"
};

export enum ServiceAPIURI {
	/** 初始化用户 */
	InitUser = 'ac_ca/user/init',
	/** 获取用户信息 */
	UserInfo = 'ac_ca/user/info',
	/** 地域配置数据 */
	ConfCoun = 'ac_ca/config/country',
	/** 项目其他配置 */
	ConfOther = 'ac_ca/config/other',
	/** 消除奖励查询 */
	FruitGet = 'ac_ca/eliminate/getFruit',
	/** 消除奖励领取 */
	FruitConfirm = 'ac_ca/eliminate/confirmFruit',
	/** 资产清除 */
	SymbolClean = 'ac_ca/symbol/clean',
	/** 钻石资产同步 */
	DiamondSync = 'ac_ca/user/diamond',
	/** 发起提现请求 */
	Free = 'ac_ca/symbol/free',
	/** 创建一条支付记录 */
	GCreate = 'ac_ca/givemefive/create',
	/** 查询支付记录 */
	GStatus = 'ac_ca/givemefive/status',
	/** 解锁槽位 */
	Unlock = 'ac_ca/user/unlockSlot',
}

export interface ServiceAPIStructureMap{
	[ServiceAPIURI.InitUser]: api_structure_template<{
		/** 初始化用户的设备ID */
		deviceId: string;
		/**
		 * 国家代码
		 * {@link https://q178jmgy9tl.feishu.cn/sheets/MaWdsru9ihFVVZtb7LCcGjy6nef}
		 */
		country: string;
	}, {
		/** 用户ID */
		userId: number;
		/** 用户的国家配置 */
		country: string;
		/** 用户的语言配置 */
		language: string;
	}>,
	[ServiceAPIURI.UserInfo]: api_structure_template<{
		/** 初始化用户的设备ID */
		userId: number;
	}, {
		/** 用户国家信息 */
		country: string;
		/** 用户语言信息 */
		language: string;
		/** 账户余额 */
		symbol: number;
		/** 用户当前关卡标识 */
		round: number;
		/** 账户钻石 */
		diamond: number;
		/** 用户是否购买奖励翻倍 */
		rewardIncrease: boolean;
		/** 用户是否购买解锁空格 */
		addSpace: boolean;
		/** 提现池 */
		freePool: Array<{
			/** 提现金额 */
			symbol: number;
			/** 提现关卡标记 */
			round: number;
			/** 提现id */
			freeID: number;
		}>
	}>,
	[ServiceAPIURI.ConfCoun]: api_structure_template<{
		/** 国家代码 */
		country: string;
	}, {
		/**
		 * 国家代码
		 * {@link https://q178jmgy9tl.feishu.cn/sheets/MaWdsru9ihFVVZtb7LCcGjy6nef}
		 */
		country: string;
		/** 语言代码 */
		language: string;
		/** 货币符号 */
		symbol: string;
		/**
		 * 货币格式是否需要去整
		 * [1]: 需要;
		 * [0]: 不需要;
		 */
		round: 1|0;
		/**
		 * 货币格式符号前置
		 * [1]: 前置;
		 * [0]: 后置;
		 */
		front: 1|0;
		/**
		 * 千位符
		 * [1]: ".";
		 * [2]: ",";
		 * [3]: " ";
		 */
		thousand: 1|2|3;
		/**
		 * 基数点
		 * [1]: ".";
		 * [2]: ",";
		 * [3]: " ";
		 */
		point: 1|2|3;
		/** 常用支付渠道 */
		channel: string[];
	}>,
	[ServiceAPIURI.ConfOther]: api_structure_template<{
		/** 国家代码 */
		country: string;
	}, {
		/** 强弹间隔 */
		forcePopInterval: number;
		/** 排行榜配置 */
		rank: {
			range100: [number, number];
			roundIncrease: [number, number];
			rangeCoe: [number, number];
		};
		/** 弹幕配置 */
		livecomments: {
			/** 第一关通关奖励 */
			fruit1: number;
			/** 第二关通关奖励 */
			fruit2: number;
			/** 第三关通关奖励 */
			fruit3: number;
			/** 第四关通关奖励系数范围 */
			fruit4CoeRange: [number, number];
			/** 第四关挑战次数范围 */
			challenge4Range: [number, number];
		};
		/** 统计信息配置 */
		statistics: {
			/** 第一关通关提现统计 */
			free1Total: number;
			/** 第二关通关提现统计 */
			free2Total: number;
			/** 第三关通关提现统计 */
			free3Total: number;
			/** 第四关通关提现统计范围 */
			free4TotalRange: [number, number];
			/** 第四关平均挑战次数范围 */
			challenge4Range: [number, number];
		};
		/** 幸运宝箱配置 */
		luckyBox: {
			/** 刷新间隔 */
			interval: number;
			/** 钻石奖励 */
			diamond: number;
		};
		/** 特殊消除奖励配置 */
		specialFruit: {
			/** 特殊消除现金奖励 */
			symbol: number;
			/** 特殊消除钻石奖励 */
			diamond: number;
		};
		/** 道具钻石价格 */
		propPriceByDiamond: {
			/** 移出道具 */
			stash: number;
			/** 撤回道具 */
			revoke: number;
			/** 洗牌道具 */
			shuffle: number;
			/** 复活道具 */
			resurgence: number;
		};
		/** 游戏内各加成功能的现金售价或者钻石数量 */
		buffPrice: {
			/** 解锁暂存区商品id */
			unlockDrawerGoodsId: string;
			/** 超级礼物商品id */
			superGiftGoodsId: string;
			/** 关闭强弹广告商品id */
			removeAdPackGoodsId: string;
			/** 通行证商品id */
			masterPassGoodsId: string;
		};
		/** 钻石充值档位 */
		diamondPrice: Array<{
			/** 钻石数量 */
			diamond: number;
			/** 商品标识id */
			goodsId: string;
			/** 商品图标展示 */
			icon: 'goods1'|'goods2'|'goods3';
			/** 新手折扣标志 */
			isFreshman: boolean;
			/** 折扣标志 */
			discount: '50'|'25';
			/** 售价 */
			price: number;
		}>;
		/** 闯关任务配置 */
		taskRound: Array<{
			/** 达成条件： 通过关卡标记 */
			round: number;
			/** 关卡类型，是否是困难关卡 */
			isHard: boolean;
			/** 任务达成后的钻石奖励 */
			diamond: number;
		}>;
		taskRemove: Array<{
			/** 达成条件：任务所需的累积消除次数 */
			count: number;
			/** 达成奖励：钻石奖励数值 */
			diamond: number;
		}>;
		/** 通行证奖励配置 */
		masterPassConfig: Array<{
			/** 通行证等级 */
			level: number;
			/** 达成条件：消除次数 */
			eliminateCount: number;
			/** 普通奖励：钻石数量 */
			commonDiamondCount: number;
			/** 超级奖励 */
			specialPassport: {
				/** 超级奖励 : 类型 1 钻石 2 移除 3 撤回 4洗牌*/
				type: number;
				/** 超级奖励 : 数量 */
				count: number;
			};
		}>;
	}>,
	[ServiceAPIURI.FruitGet]: api_structure_template<{
		/** 用户ID */
		userId: number;
		/**
		 * 现金获取类型
		 * [0]: 普通消除;
		 * [1]: 特殊消除;
		 */
		type: 0|1;
		/** 当前关卡  */
		level: number;
	}, {
		/** 获取现金金额 */
		amount: number;
		/** 获取钻石数量 */
		diamond: number;
		/** 奖励token */
		logId: number;
	}>,
	[ServiceAPIURI.FruitConfirm]: api_structure_template<{
		/** 用户ID */
		userId: number;
		/** 领取类型 0 普通领取 1 特殊领取*/
		type: number;
		/** 要确认的奖励token */
		logId: number;
	}, {
		/** 确认更新后，用户的总资产 */
		symbol: number;
	}>,
	[ServiceAPIURI.SymbolClean]: api_structure_template<{
		/** 用户ID */
		userId: number;
		/** 是否要压入提现池 */
		cache: boolean;
		/** 用户当前通关的关卡 */
		round?: number;
	}, {
		/** 更新后的用户余额 */
		symbol: number;
	}>,
	[ServiceAPIURI.DiamondSync]: api_structure_template<{
		/** 用户ID */
		userId: number;
		/** 变更钻石数量*/
		diamond: number;
	}, {
		/** 更新后的钻石数量 */
		diamond: number;
	}>,
	[ServiceAPIURI.Free]: api_structure_template<{
		/** 用户ID */
		userId: number;
		/** 提现ID */
		freeID: number;
		/** 打款渠道 */
		channel: string;
		/** 打款账户 */
		account: string;
		/** 账户类型  EMAIL PHONE*/
		accountType: string;
		/** 账户姓名 */
		accountName: string;
	}, {}>,
	[ServiceAPIURI.GCreate]: api_structure_template<{
		/** 用户ID */
		userId: number;
		/** 商品id */
		goodsId: number;
	}, {
		/** 支付记录的ID */
		GMFID: string;
		/** 重定向收银台URL */
		redirectUrl: string;
	}>,
	[ServiceAPIURI.GStatus]: api_structure_template<{
		/** 用户ID */
		userId: number;
		/** 支付记录的ID */
		GMFID: number;
	}, {
		/** 支付记录状态 PENDING:等待支付；SUCCESS:支付成功；FAILED：支付失败 ；CLOSED：用户在有效期内未完成支付*/
		status: string;
	}>;
	[ServiceAPIURI.Unlock]: api_structure_template<{
		/** 用户ID */
		userId: number;
	}, {
		/** 是否解锁成功 */
		unlock: boolean;
	}>;
}

type request_template<body> = {
	/** cocos 请求唯一标识 */
	ccToken: string;
	/** 接口请求参数 */
	data: body;
};

type response_template<result> = {
	/** cocos 请求唯一标识 */
	ccToken: string;
	/** 响应是否成功 */
	success: boolean;
	/** 响应信息 */
	message: string;
	/** 响应码 */
	code: string;
	/** 响应数据 */
	result: result;
}

type api_structure_template<body, result> = {
	/** 接口标识符 */
	api: ServiceAPIURI;
	/** 请求数据 */
	request: request_template<body>;
	/** 响应数据 */
	response: Promise<response_template<result>>;
}

export type ServiceRequest<uri extends ServiceAPIURI> = ServiceAPIStructureMap[uri]['request'];
export type ServiceResponse<uri extends ServiceAPIURI> = Awaited<ServiceAPIStructureMap[uri]['response']>;
export type ServiceBody<uri extends ServiceAPIURI> = ServiceRequest<uri>['data'];
export type ServiceResult<uri extends ServiceAPIURI> = ServiceResponse<uri>['result'];